﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CROSLAND.BL.BE
{
    public class PedidoBE
    {
        public PedidoBE()
        {
            this._fecha = DateTime.Now;
            this._fechaValidez = DateTime.Now;
            this._fechaEntrega = DateTime.Now;
            //this._interlocutores = new List<InterlocutorBE>();
            this._numPedido = string.Empty;
            this._docOriginal = string.Empty;
            this._tieneEntrega = false;

            this._detalle = new List<DetalleBE>();
            this._tieneKitCombo = false;
            this._referencia = string.Empty;

            this._zasensor = true;
            this._zncservicio = false;
            this._ztransporte = string.Empty;
            this._znpiso = "0";
            this._subtotalImp = 0m;
            this._tipoVisita = string.Empty;
            this._reenbolsable = false;
        }

        /// <summary>
        /// 
        /// </summary>
        private List<ReservaBE> listaReserva;
        public List<ReservaBE> ListaReserva
        {
            get { return listaReserva; }
            set { listaReserva = value; }
        }

        //INICIO VISITAS: mtejada 09.09.2011
        private string _tipoVisita;

        public string TipoVisita
        {
            get { return _tipoVisita; }
            set { _tipoVisita = value; }
        }

        private bool _reenbolsable;

        public bool Reenbolsable
        {
            get { return _reenbolsable; }
            set { _reenbolsable = value; }
        }


        //FIN VISITAS: mtejada 09.09.2011

        //INICIO INSTALACIONES: mtejada 12.10.2011
        private string _PedidoVenta1;

        public string PedidoVenta1
        {
            get { return _PedidoVenta1; }
            set { _PedidoVenta1 = value; }
        }
        private string _PedidoVenta2;

        public string PedidoVenta2
        {
            get { return _PedidoVenta2; }
            set { _PedidoVenta2 = value; }
        }
        private string _PedidoVenta3;

        public string PedidoVenta3
        {
            get { return _PedidoVenta3; }
            set { _PedidoVenta3 = value; }
        }
        private string _PedidoVenta4;

        public string PedidoVenta4
        {
            get { return _PedidoVenta4; }
            set { _PedidoVenta4 = value; }
        }

        private string _PedidoVisita1;

        public string PedidoVisita1
        {
            get { return _PedidoVisita1; }
            set { _PedidoVisita1 = value; }
        }
        private string _PedidoVisita2;

        public string PedidoVisita2
        {
            get { return _PedidoVisita2; }
            set { _PedidoVisita2 = value; }
        }
        private string _PedidoVisita3;

        public string PedidoVisita3
        {
            get { return _PedidoVisita3; }
            set { _PedidoVisita3 = value; }
        }
        private string _PedidoVisita4;

        public string PedidoVisita4
        {
            get { return _PedidoVisita4; }
            set { _PedidoVisita4 = value; }
        }
        //FIN INSTALACIONES: mtejada 12.10.2011

        private decimal _subtotalImp = 0m;

        public decimal SubtotalImp
        {
            get { return _subtotalImp; }
            set { _subtotalImp = value; }
        }


        private DateTime _fechaFacturacion;

        public DateTime FechaFacturacion
        {
            get { return _fechaFacturacion; }
            set { _fechaFacturacion = value; }
        }


        public string _mail;

        public string Mail
        {
            get { return _mail; }
            set { _mail = value; }
        }

        private bool _tieneEntrega;

        public bool TieneEntrega
        {
            get { return _tieneEntrega; }
            set { _tieneEntrega = value; }
        }

        private string _docOriginal;

        public string DocOriginal
        {
            get { return _docOriginal; }
            set { _docOriginal = value; }
        }

        private string _znpiso;

        public string Znpiso
        {
            get { return _znpiso; }
            set { _znpiso = value; }
        }

        private string _ztransporte;

        public string Ztransporte
        {
            get { return _ztransporte; }
            set { _ztransporte = value; }
        }

        private bool _zasensor;

        public bool Zasensor
        {
            get { return _zasensor; }
            set { _zasensor = value; }
        }

        private bool _zncservicio;

        public bool Zncservicio
        {
            get { return _zncservicio; }
            set { _zncservicio = value; }
        }
        //--------

        private string _referencia;

        public string Referencia
        {
            get { return _referencia; }
            set { _referencia = value; }
        }

        private bool _tieneKitCombo;

        public bool TieneKitCombo
        {
            get { return _tieneKitCombo; }
            set { _tieneKitCombo = value; }
        }

        private string _numPedido;

        public string NumPedido
        {
            get {
                //return _numPedido;
                return _numPedido.PadLeft(10, '0'); 
            }
            set { _numPedido = value; }
        }

        //rgutierrez 16.12.2011
        private string _numPedidoCorto;
        public string NumPedidoCorto
        {
            get
            {
                return _numPedidoCorto;
            }
            set { _numPedidoCorto = value; }
        }

        private DateTime _fecha;

        public DateTime Fecha
        {
            get { return _fecha; }
            set { _fecha = value; }
        }

        public string FechaString
        {
            get { return _fecha.ToString("dd/MM/yyyy"); }
        }

        private DateTime _fechaValidez;

        public DateTime FechaValidez
        {
            get { return _fechaValidez; }
            set { _fechaValidez = value; }
        }

        public string FechaValidezString
        {
            get { return _fechaValidez.ToString("dd/MM/yyyy"); }
        }

        private DateTime _fechaEntrega;

        public DateTime FechaEntrega
        {
            get { return _fechaEntrega; }
            set { _fechaEntrega = value; }
        }

        public string FechaEntregaString
        {
            get { return _fechaEntrega.ToString("dd/MM/yyyy"); }
        }

        private string _codCliente;

        public string CodCliente
        {
            get { return _codCliente.PadLeft(10, '0'); ; }
            set { _codCliente = value; }
        }

        //rgutierrez 16.12.2011
        private string _codClienteCorto;
        public string CodClienteCorto
        {
            get { return _codClienteCorto; }
            set { _codClienteCorto = value; }
        }

        private string _ordenCompra;

        public string OrdenCompra
        {
            get { return _ordenCompra; }
            set { _ordenCompra = value; }
        }

        private string _codTipoDoc;

        public string CodTipoDoc
        {
            get { return _codTipoDoc; }
            set { _codTipoDoc = value; }
        }

        private string _codOficina;

        public string CodOficina
        {
            get { return _codOficina; }
            set { _codOficina = value; }
        }

        private string _codGrupoVend;

        public string CodGrupoVend
        {
            get { return _codGrupoVend; }
            set { _codGrupoVend = value; }
        }

        private string _sociedad;

        public string Sociedad
        {
            get { return _sociedad; }
            set { _sociedad = value; }
        }

        private string _orgVentas;

        public string OrgVentas
        {
            get { return _orgVentas; }
            set { _orgVentas = value; }
        }

        private string _canalDist;

        public string CanalDist
        {
            get { return _canalDist; }
            set { _canalDist = value; }
        }

        private string _sector;

        public string Sector
        {
            get { return _sector; }
            set { _sector = value; }
        }


        //--- interlocutores ---
        private List<InterlocutorBE> _interlocutores;

        public List<InterlocutorBE> Interlocutores
        {
            get { return _interlocutores; }
            set { _interlocutores = value; }
        }
        //---

        //--- textos ---
        private List<TextoBE> _textos;

        public List<TextoBE> Textos
        {
            get { return _textos; }
            set { _textos = value; }
        }
        //---

        private string _vendedor1;

        public string Vendedor1
        {
            get { return _vendedor1; }
            set { _vendedor1 = value; }
        }

        private string _vendedor2;

        public string Vendedor2
        {
            get { return _vendedor2; }
            set { _vendedor2 = value; }
        }

        private string _vendedor3;

        public string Vendedor3
        {
            get { return _vendedor3; }
            set { _vendedor3 = value; }
        }

        private string _vendedor4;

        public string Vendedor4
        {
            get { return _vendedor4; }
            set { _vendedor4 = value; }
        }

        private string _profesional;

        public string Profesional
        {
            get { return _profesional; }
            set { _profesional = value; }
        }

        private string _transportista;

        public string Transportista
        {
            get { return _transportista; }
            set { _transportista = value; }
        }

        private string _destMercaderia;

        public string DestMercaderia
        {
            get { return _destMercaderia; }
            set { _destMercaderia = value; }
        }

        private string _destFactura;

        public string DestFactura
        {
            get { return _destFactura; }
            set { _destFactura = value; }
        }

        private string _resPago;

        public string ResPago
        {
            get { return _resPago; }
            set { _resPago = value; }
        }

        private string _agTransporte;

        public string AgTransporte
        {
            get { return _agTransporte; }
            set { _agTransporte = value; }
        }
        //---------------

        //--- detalle ---
        private List<DetalleBE> _detalle;

        public List<DetalleBE> Detalle
        {
            get { return _detalle; }
            set { _detalle = value; }
        }
        //---------------

        //private decimal _subTotal;

        public decimal SubTotal
        {
            get 
            {
                decimal retval = 0m;
                foreach (DetalleBE objDet in this.Detalle)
                {                    
                    retval += decimal.Round(objDet.SubTotal, 2, MidpointRounding.AwayFromZero);
                }
                return decimal.Round(retval, 2, MidpointRounding.AwayFromZero);
            }
            //set { _subTotal = value; }
        }

        //public decimal SubTotalImpr
        //{
        //    get
        //    {
        //        decimal retval = 0m;
        //        foreach (DetalleBE objDet in this.Detalle)
        //        {
        //            retval += decimal.Round(objDet.TotalImpresion, 2, MidpointRounding.AwayFromZero);
        //        }
        //        return decimal.Round(retval, 2, MidpointRounding.AwayFromZero);
        //    }
        //    //set { _subTotal = value; }
        //}

        private List<DescuentoBE> _lstCond;
        /// <summary>
        /// Lista de condiciones
        /// </summary>
        public List<DescuentoBE> LstCond
        {
            get { return _lstCond; }
            set { _lstCond = value; }
        }

        public decimal TotalDctos
        {
            get
            {
                decimal totCond = 0m;
                foreach (DescuentoBE itm in this._lstCond)
                {
                    { totCond += itm.Valor; }
                }
                return decimal.Round(totCond, 2, MidpointRounding.AwayFromZero);
            }
        }

        public decimal Igv
        {
            get
            {
                decimal retval = 0m;
                foreach (DetalleBE objDet in this.Detalle)
                {
                    retval += decimal.Round(objDet.IgvTotal, 2, MidpointRounding.AwayFromZero);
                }
                return decimal.Round(retval, 2, MidpointRounding.AwayFromZero);
            }
        }

        public decimal Total
        {
            get { return this.Igv + this.SubTotal - Math.Abs(this.TotalDctos); }
        }
        
        public decimal TotalImp
        {
            get { return this.Igv + this.SubtotalImp; }
        }

        public decimal PesoTotal
        {
            get
            {
                decimal retval = 0m;
                foreach (DetalleBE objDet in this.Detalle)
                {
                    retval += decimal.Round(objDet.Peso * objDet.Cantidad, 3, MidpointRounding.AwayFromZero);
                }
                return decimal.Round(retval, 3, MidpointRounding.AwayFromZero);
            }
        }

        //--- nuevo
        private string _moneda;

        public string Moneda
        {
            get { return _moneda; }
            set { _moneda = value; }
        }

        private string _condPago;

        public string CondPago
        {
            get { return _condPago; }
            set { _condPago = value; }
        }

        private string _condExp;

        public string CondExp
        {
            get { return _condExp; }
            set { _condExp = value; }
        }

        private string _grupoCond;

        public string GrupoCond
        {
            get { return _grupoCond; }
            set { _grupoCond = value; }
        }

        private string _bloqueoEntrega;

        public string BloqueoEntrega
        {
            get { return _bloqueoEntrega; }
            set { _bloqueoEntrega = value; }
        }

        private string _bloqueoFactura;

        public string BloqueoFactura
        {
            get { return _bloqueoFactura; }
            set { _bloqueoFactura = value; }
        }

        private string _motivo;

        public string Motivo
        {
            get { return _motivo; }
            set { _motivo = value; }
        }

        private decimal _tipoCambio;

        public decimal TipoCambio
        {
            get { return decimal.Round(_tipoCambio, 4); }
            set { _tipoCambio = value; }
        }

        private bool _tratado;
        /// <summary>
        /// Indica si el pedido ya fue facturado.
        /// </summary>
        public bool Tratado
        {
            get { return _tratado; }
            set { _tratado = value; }
        }

        private string _estado;

        public string Estado
        {
            get { return _estado; }
            set { _estado = value; }
        }

        //rgutierrez 15.12.2011
        private string _clasePedidoCliente;
        public string ClasePedidoCliente
        {
            get { return _clasePedidoCliente; }
            set { _clasePedidoCliente = value; }
        }

        //rgutierrez 16.12.2011
        private string _claseDocumento;
        public string ClaseDocumento
        {
            get
            {
                return _claseDocumento;
            }
            set { _claseDocumento = value; }
        }

        //rgutierrez 16.12.2011
        private decimal _totalConIgv;
        public decimal TotalConIgv
        {
            get { return _totalConIgv; }
            set { _totalConIgv = value; }
        }

        //rhuapaya 14.02.2012
        public string nomProyecto { get; set; }
        //rhuapaya 20.06.2012
        public string CodTipoDocAnt { get; set; }
        public decimal dsctoAdicionalZD12 { get; set; }
        public decimal dsctoAdicionalZD12tmp { get; set; }

        public string folioLegal { get; set; }
        public string compensacion { get; set; }
        public string nomCliente { get; set; }
        public decimal totalFact { get; set; }
        public DateTime? FechaInicio { get; set; }
        public DateTime? FechaFin { get; set; }
        public string UsuarioCreacion { get; set; }
        /// <summary>
        /// % I.G.V.
        /// </summary>
        public decimal IGV { get; set; }

        public string caja { get; set; }
        public string turno { get; set; }
        public string boveda { get; set; }
        /// <summary>
        /// Campo para saber si el cliente se le aplica el igv
        /// </summary>
        public string ClienteIGV { get; set; }
        public string ClienteISC { get; set; }
        public string RUCDNI { get; set; }
    }
}
